package co.edu.javeriana.konigsberg.xavier.gui.wrapper;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStream;
import java.io.Serializable;
import java.math.BigInteger;
import java.nio.file.Files;
import java.nio.file.Paths;
import java.util.Date;

import org.primefaces.model.DefaultStreamedContent;
import org.primefaces.model.StreamedContent;

import co.edu.javeriana.konigsberg.xavier.dto.PropuestaArchivoDTO;



public class ArchivoWrapper implements Serializable{
	private BigInteger idArchivo;
	private BigInteger idPrograma;
	private String tipoArchivo;
	private String nombreArchivo;
	private Date fecha;
	private String autor;
	private StreamedContent archivo;
	private Boolean ultimaVersion;
	public String getNombreArchivo() {
		return nombreArchivo;
	}
	public void setNombreArchivo(String nombreArchivo) {
		this.nombreArchivo = nombreArchivo;
	}
	public Date getFecha() {
		return fecha;
	}
	public void setFecha(Date fecha) {
		this.fecha = fecha;
	}
	public String getAutor() {
		return autor;
	}
	public void setAutor(String autor) {
		this.autor = autor;
	}
	
	public void prepare(final StreamedContent arq) {
		try {
			InputStream stream = null;
			String pathName = null;
			if (PropuestaArchivoDTO.TIPO_ARCHIVO_TECNICO.equals(tipoArchivo)) {
				pathName = PropuestaArchivoDTO.PATH_TECNICAS + idPrograma
						+ File.separator + nombreArchivo;
			} else if (PropuestaArchivoDTO.TIPO_ARCHIVO_FINANCIERO
					.equals(tipoArchivo)) {
				pathName = PropuestaArchivoDTO.PATH_FINANCIERAS + idPrograma
						+ File.separator + nombreArchivo;
			}
			stream = new FileInputStream(pathName);
			archivo = new DefaultStreamedContent(stream,
					Files.probeContentType(Paths.get(pathName)), nombreArchivo);
		} catch (FileNotFoundException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		} catch (IOException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}
	
	public StreamedContent getArchivo() {
		return archivo;
		
	}
	public void setArchivo(StreamedContent archivo) {
		this.archivo = archivo;
	}
	public Boolean getUltimaVersion() {
		return ultimaVersion;
	}
	public void setUltimaVersion(Boolean ultimaVersion) {
		this.ultimaVersion = ultimaVersion;
	}
	public BigInteger getIdPrograma() {
		return idPrograma;
	}
	public void setIdPrograma(BigInteger idPrograma) {
		this.idPrograma = idPrograma;
	}
	public String getTipoArchivo() {
		return tipoArchivo;
	}
	public void setTipoArchivo(String tipoArchivo) {
		this.tipoArchivo = tipoArchivo;
	}
	public BigInteger getIdArchivo() {
		return idArchivo;
	}
	public void setIdArchivo(BigInteger idArchivo) {
		this.idArchivo = idArchivo;
	}
}
